﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace FrmLogin
{
    public class clsFunciones
    {
        string strCnx = "Server=.;DataBase=Permisos;Integrated Security=SSPI;";

        public DataTable GetUsuarios()
        {
            DataTable dt = new DataTable();
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("SELECT IdUsuario, Nombre, Apellido, Usuario,Contrasena Password,EsAdmin, Estado FROM dbo.Usuarios ", cnx);
            cmd.CommandType = CommandType.Text;           
            cnx.Open();
            dt.Load(cmd.ExecuteReader());
            cnx.Close();
            return dt;
        }

        public DataTable FillByIdUsuario(int codigo)
        {
            DataTable dt = new DataTable();
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("SELECT IdUsuario, Nombre, Apellido, Usuario,Contrasena Password,isnull(EsAdmin,0) EsAdmin, isnull(Estado,0) Estado FROM dbo.Usuarios WHERE IdUsuario = @IdUsuario ", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@IdUsuario", codigo);
            cnx.Open();
            dt.Load(cmd.ExecuteReader());
            cnx.Close();
            return dt;
        }

        public DataTable GetDataDisponibleByIdUsuario(int codigo)
        {
            DataTable dt = new DataTable();
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("select IdModulo,Modulo from Modulos where IdModulo not in (select IdModulo from DetalleUsuarioModulos where IdUsuario= @IdUsuario) ", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@IdUsuario", codigo);
            cnx.Open();
            dt.Load(cmd.ExecuteReader());
            cnx.Close();
            return dt;
        }

        public DataTable GetDataAsignadaByIdUsuario(int codigo)
        {
            DataTable dt = new DataTable();
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("select IdModulo,Modulo from Modulos where IdModulo in (select IdModulo from DetalleUsuarioModulos where IdUsuario= @IdUsuario)", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@IdUsuario", codigo);
            cnx.Open();
            dt.Load(cmd.ExecuteReader());
            cnx.Close();
            return dt;
        }

        public DataTable GetDataByLogin(string login, string password)
        {
            DataTable dt = new DataTable();
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("SELECT IdUsuario, Nombre, Apellido, Usuario, Contrasena,EsAdmin, Estado FROM dbo.Usuarios WHERE Usuario = @Usuario AND Contrasena = @Contrasena AND Estado = 1 ", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@Usuario", login);
            cmd.Parameters.AddWithValue("@Contrasena", password);
            cnx.Open();
            dt.Load(cmd.ExecuteReader());
            cnx.Close();
            return dt;
        }

        public DataTable GetDataByIdUsuario(int codigo)
        {
            DataTable dt = new DataTable();
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("SELECT IdUsuario, IdModulo FROM dbo.DetalleUsuarioModulos WHERE IdUsuario = @IdUsuario ", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@IdUsuario", codigo);
            cnx.Open();
            dt.Load(cmd.ExecuteReader());
            cnx.Close();
            return dt;
        }

        public bool insertUsuario(BEUsuario BE)
        {
            bool _resultado = false;
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("Insert into Usuarios (Nombre,Apellido,Usuario,Contrasena,EsAdmin,Estado) values(@Nombre,@Apellido,@Usuario,@Contrasena,@EsAdmin,@Estado)", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@Nombre", BE.Nombre);
            cmd.Parameters.AddWithValue("@Apellido", BE.Apellido);
            cmd.Parameters.AddWithValue("@Usuario", BE.Usuario);
            cmd.Parameters.AddWithValue("@Contrasena", BE.Contrasena);
            cmd.Parameters.AddWithValue("@EsAdmin", BE.EsAdmin);
            cmd.Parameters.AddWithValue("@Estado", BE.Estado);
            cnx.Open();
            _resultado = Convert.ToBoolean(cmd.ExecuteNonQuery());
            cnx.Close();
            return _resultado;
        }

        public bool insertPermisoUsuario(int idUsuario,int idModulo)
        {
            bool _resultado = false;
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("Insert into DetalleUsuarioModulos (IdUsuario,IdModulo) values(@IdUsuario,@IdModulo)", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@IdUsuario", idUsuario);
            cmd.Parameters.AddWithValue("@IdModulo", idModulo);           
            cnx.Open();
            _resultado = Convert.ToBoolean(cmd.ExecuteNonQuery());
            cnx.Close();
            return _resultado;
        }

        public bool deletePermisoUsuario(int idUsuario, int idModulo)
        {
            bool _resultado = false;
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("delete from DetalleUsuarioModulos WHERE IdUsuario = @IdUsuario and IdModulo=@IdModulo", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@IdUsuario", idUsuario);
            cmd.Parameters.AddWithValue("@IdModulo", idModulo);
            cnx.Open();
            _resultado = Convert.ToBoolean(cmd.ExecuteNonQuery());
            cnx.Close();
            return _resultado;
        }

        public bool updateUsuario(BEUsuario BE)
        {
            bool _resultado = false;
            SqlConnection cnx = new SqlConnection(strCnx);
            SqlCommand cmd = new SqlCommand("update Usuarios set Nombre=@Nombre,Apellido=@Apellido,Usuario=@Usuario,Contrasena=@Contrasena,EsAdmin=@EsAdmin,Estado=@Estado where IdUsuario=@IdUsuario", cnx);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@IdUsuario", BE.IdUsuario);
            cmd.Parameters.AddWithValue("@Nombre", BE.Nombre);
            cmd.Parameters.AddWithValue("@Apellido", BE.Apellido);
            cmd.Parameters.AddWithValue("@Usuario", BE.Usuario);
            cmd.Parameters.AddWithValue("@Contrasena", BE.Contrasena);
            cmd.Parameters.AddWithValue("@EsAdmin", BE.EsAdmin);
            cmd.Parameters.AddWithValue("@Estado", BE.Estado);
            cnx.Open();
            _resultado = Convert.ToBoolean(cmd.ExecuteNonQuery());
            cnx.Close();
            return _resultado;
        }           

        public string SHA1(string strToHash) 
        { 
            using (System.Security.Cryptography.SHA1CryptoServiceProvider sha1Obj = new System.Security.Cryptography.SHA1CryptoServiceProvider()) 
            { 
                byte[] bytesToHash = System.Text.Encoding.ASCII.GetBytes(strToHash); 
                bytesToHash = sha1Obj.ComputeHash(bytesToHash); 
                string strResult = ""; 
                foreach (byte b in bytesToHash) 
                { 
                    strResult += b.ToString("x2"); 
                } 
                return strResult; 
            } 
        }
    }
}
